#include <iostream>
using namespace std;

#define BUFFER_SIZE 1000000;

// void test01()
// {
//     /* 异常的语法：
//         1,语法:
//         try
//         {

//         }
//         catch()
//         {
            
//         }
//         2,如果出现异常，出现异常之后的代码就不会执行了;
//     */
//     cout << "111" << endl;
//     for(int idx = 0; idx < BUFFER_SIZE; idx++)
//     {
        
//         try
//         {
//             int * num = new int[100000000];
//         }
//         catch(...)/* ...捕捉任意异常*/
//         {
//             cout << "内存不够" << endl;
//             break;
//         }
//         /* 如果异常不处理，程序就终止了*/
//     }
//     cout << "2222" << endl;
// }
/*
    主动抛异常
        语法:
            throw (int)123 : 整形
            throw (string)"123" : 字符串
*/
int myDivide(int val1, int val2)
{
    if(val2 == 0)
    {
        #if 0
        throw "除数不能为0";//抛异常字符串
        #else
        throw 666;//抛异常整形
        #endif
    }
    return val1 / val2;
}

/* 异常申明1，
    catch 1：可能会抛出任何异常
*/
int func1()
{

}
int func3() noexcept(false)
{
    
}

/* 异常申明2，
    catch 2：不抛出任何异常
*/
int func2() throw()
{
    return 0;
}

int func4() noexcept
{
    return 0;
}

int func4() noexcept(true)
{
    return 0;
}

#if 0
/* 异常申明3，
    catch 3：只可能抛出int,和double两种异常
*/
int func3() throw(int, double)
{
    /* 异常声明目的: 为了团队开发*/
}
#endif




/* 1, 捕捉异常*/
int main()
{
    
    //test01();
    
    try
    {
        /* 主动抛出异常*/
        myDivide(100, 0);
    }
    catch(...)/* ...捕捉任意异常*/
    {
        cout << "此函数主动抛出异常" << endl;
    }
    cout << "hello world" << endl;
    return 0;
}